iT邦幫忙

2024 iThome 鐵人賽

0

在現代 Web 開發中,GraphQL 和 REST 是兩種常見的 API 設計風格。它們各有優勢和適用場景,理解它們的差異及應用有助於在實際項目中做出最佳選擇。

GraphQL 與 REST 的基本概念
REST(Representational State Transfer)

  • 架構風格:基於資源的設計,每個資源通過唯一的 URL 進行訪問。
  • HTTP 方法:使用標準的 HTTP 方法(GET、POST、PUT、DELETE)進行操作。
  • 固定結構:每個 API 端點返回固定的數據結構,可能導致過多的數據傳輸或多次請求以獲取所需數據。
    GraphQL
  • 查詢語言:由 Facebook 開發,允許客戶端精確指定所需的數據。
  • 單一端點:所有請求通過一個端點處理,不需要多個 URL。
  • 靈活性:減少過多或不足的數據傳輸,支持複雜的查詢和嵌套關係。

在實際項目中選擇 GraphQL 或 REST
選擇 GraphQL 或 REST 取決於項目的需求、團隊的技術棧以及未來的擴展性考量。

選擇 REST 的情境

  • 簡單的 CRUD 操作:對於基本的創建、讀取、更新和刪除操作,REST 足夠且實現簡單。
  • 標準化和廣泛支持:REST 已被廣泛採用,許多工具和庫支持良好。
  • 瀏覽器緩存:利用 HTTP 緩存機制,提升性能。
  • 快速開發:對於小型項目或 MVP(最小可行產品),REST 更易於快速實施。

選擇 GraphQL 的情境

  • 複雜的數據需求:當前端需要從多個資源獲取數據,GraphQL 可以減少請求次數。
  • 靈活的數據獲取:前端開發人員可以根據需要自定義查詢,避免過多或不足的數據傳輸。
  • 實時數據:GraphQL 支持訂閱(Subscriptions),適合需要實時更新的應用。
  • 版本管理:GraphQL 通常不需要像 REST 一樣頻繁地進行版本更新,因為客戶端可以靈活調整查詢。

GraphQL 的實現步驟
實現 GraphQL 涉及設計架構、定義 schema、設置服務器以及與前端集成等步驟。以下以 Node.js 為例說明實現步驟:

  1. 設置開發環境
    安裝 Node.js:確保開發環境中已安裝 Node.js 和 npm。
    初始化項目:
mkdir graphql-server
cd graphql-server
npm init -y
  1. 安裝必要的依賴
    安裝 GraphQL 和相關庫:
npm install express express-graphql graphql
  1. 定義 GraphQL Schema
    Schema 定義:描述數據類型、查詢和變更操作。
// schema.js
const { buildSchema } = require('graphql');

const schema = buildSchema(`
  type Query {
    hello: String
    user(id: ID!): User
    users: [User]
  }

  type Mutation {
    createUser(name: String!, age: Int!): User
  }

  type User {
    id: ID
    name: String
    age: Int
  }
`);

module.exports = schema;
  1. 定義 Resolver 函數
    Resolver:處理查詢和變更的具體邏輯。
// resolvers.js
const users = [
  { id: '1', name: 'Alice', age: 30 },
  { id: '2', name: 'Bob', age: 25 },
];

const root = {
  hello: () => 'Hello, world!',
  user: ({ id }) => users.find(user => user.id === id),
  users: () => users,
  createUser: ({ name, age }) => {
    const newUser = { id: String(users.length + 1), name, age };
    users.push(newUser);
    return newUser;
  },
};

module.exports = root;
  1. 設置 GraphQL 服務器
    Express 服務器:
// server.js
const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const schema = require('./schema');
const root = require('./resolvers');

const app = express();

app.use('/graphql', graphqlHTTP({
  schema: schema,
  rootValue: root,
  graphiql: true, // 開發環境下啟用 GraphiQL 界面
}));

app.listen(4000, () => {
  console.log('GraphQL API server running at http://localhost:4000/graphql');
});
  1. 測試 GraphQL API
    使用 GraphiQL:訪問 http://localhost:4000/graphql,通過圖形界面測試查詢和變更操作。
  2. 與前端集成
    使用 Apollo Client 或其他 GraphQL 客戶端庫,與前端應用進行集成,發送查詢和處理響應數據

上一篇
DAY 27. API 監控與分析
下一篇
DAY 29. API 的生命周期管理
系列文
API 101:從基礎認識到應用的全方位指南-Swagger/Postman30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言